package com.hlj.ncp.warehouse.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hlj.ncp.warehouse.entity.ColdStorageMonitor;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 冷库湿温度监控 数据层
 */
@Mapper
public interface ColdStorageMonitorMapper extends BaseMapper<ColdStorageMonitor> {
    
    /**
     * 查询最新的监控数据
     * 
     * @param warehouseId 仓库ID
     * @return 监控数据列表
     */
    List<ColdStorageMonitor> selectLatestMonitorData(@Param("warehouseId") Long warehouseId);
    
    /**
     * 统计各状态的监控数据
     * 
     * @param warehouseId 仓库ID
     * @return 统计结果
     */
    List<Map<String, Object>> selectMonitorStats(@Param("warehouseId") Long warehouseId);
    
    /**
     * 查询指定时间范围内的监控数据
     * 
     * @param warehouseId 仓库ID
     * @param storageArea 冷库区域
     * @param deviceId 设备ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 监控数据列表
     */
    List<ColdStorageMonitor> selectHistoryData(
            @Param("warehouseId") Long warehouseId,
            @Param("storageArea") String storageArea,
            @Param("deviceId") String deviceId,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);
    
    /**
     * 查询温湿度趋势数据（按小时聚合）
     * 
     * @param warehouseId 仓库ID
     * @param storageArea 冷库区域
     * @param deviceId 设备ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 趋势数据列表
     */
    List<Map<String, Object>> selectTrendDataByHour(
            @Param("warehouseId") Long warehouseId,
            @Param("storageArea") String storageArea,
            @Param("deviceId") String deviceId,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);
    
    /**
     * 查询温湿度趋势数据（按天聚合）
     * 
     * @param warehouseId 仓库ID
     * @param storageArea 冷库区域
     * @param deviceId 设备ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 趋势数据列表
     */
    List<Map<String, Object>> selectTrendDataByDay(
            @Param("warehouseId") Long warehouseId,
            @Param("storageArea") String storageArea,
            @Param("deviceId") String deviceId,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);
} 